package ooday04;
//多态的演示
public class MUltiTypeDemo {
    public static void main(String[] args) {
       /* //演示向上造型
        Dog o1 = new Dog("小黑",2,"黑");//狗是狗
        //o1.name/age/color/drink()/eat()/swim()/lookhome
        Animal o2 = new Dog("小黑",2,"黑");//狗是动物
        //o2.name/age/color/drink()/eat()
        Swim o3 = new Dog("小黑",2,"黑");//狗会游泳
        //o3.swim();*/

      /* //演示向上造型(多态)的第1点应用;
       Master master = new Master();
       Dog dog = new Dog("小黑",2,"黑");
       Chick chick =new Chick("小花",3,"花");
       Fish fish = new Fish("小金",1,"金");
       master.feed(dog);//在传参的同时,系统自动做了向上造型
       master.feed(chick);
       master.feed(fish);*/

        //演示向上造型(多态)的第2点应用:
        Animal[] animals = new Animal[5];//创建Animal数组对象
        animals[0] = new Dog("小黑",2,"黑");//向上造型
        animals[1] =new Dog("小白",2,"白");
        animals[2]= new Fish("小金",1,"金");
        animals[3]= new Fish("小花",3,"花");
        animals[4]= new Chick("小灰",3,"灰");
        for (int i=0;i<animals.length;i++){//遍历所有动物
            System.out.println(animals[i].name);//输出每个动物的名字
            animals[i].drink();//每个动物喝水
            animals[i].eat();//每个动物吃饭
            if (animals[i] instanceof Dog){
                Dog dog = (Dog) animals[i];
                dog.lookHome();
            }
            if (animals[i] instanceof Chick){
                Chick chick =(Chick) animals[i];
                chick.layEggs();
            }
            if (animals[i] instanceof Swim){//适用于所有实现Swim接口的(会游泳的)
                Swim s =(Swim) animals[i];
                s.swim();
            }
        }

        //演示强转的条件:
      /*  Animal o = new Dog("小黑",2,"黑");//向下转型
        Dog g = (Dog) o;//引用o所指的对象,就是Dog类型
        Swim s = (Swim) o;//引用o所指向的对象,实现了Swim接口
//        Fish f =(Fish) o;//运行时会发生ClassCastException类型转换异常

        System.out.println(o instanceof Dog);//true
        System.out.println(o instanceof Swim);//true
        System.out.println(o instanceof Fish);//false
        if (o instanceof Fish){//fasle
            Fish f =(Fish) o;
        }else {
            System.out.println("o不是Fish类型");
        }*/
    }
}
